﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Results;
using HCQ2_Common.Constant;
using HCQ2_IBLL;
using HCQ2_Model.ClassRoom;
using HCQ2_Model.ViewModel;
using HCQ2_Model.ViewModel.WebAPI;
using HCQ2WebAPI_Logic.BaseAPIController;
using HCQ2WebAPI_Logic.Filters;

namespace HCQ2WebAPI_Logic.DocumentController
{
    /// <summary>
    /// 直播课堂相关内容
    /// </summary>
    [WeiXinApiAuthorizeFilter]
    public class ClassRoomController: BaseAPI
    {
        /// <summary>
        /// 直播课堂服务
        /// </summary>        
        private IN_VRLineClassRoomBLL ClassRoomBLL {
            get {
                return operateContext.bllSession.N_VRLineClassRoom;
            }
        }


        /// <summary>
        /// 创建直播课堂
        /// </summary>
        /// <param name="dto">参数</param>
        /// <returns></returns>
        /// <remarks>        
        /// 说明：以下情况无法创建<br/>
        /// 1.同一个用户添加的课堂上课时间如果和已有课堂，上课时间有交叉。<br/>
        /// 2.通过目录ID找不到目录。<br/>
        /// 3.通过课件ID找不到对应的课件。<br/>
        /// 修改记录<br/>
        /// 2020-07-11：修改创建人由“登录名”》“用户名”<br/>
        /// 2020-07-20：创建成功后属性“value”返回直播课堂ID<br/>
        /// 2020-08-10：新增属性“Device”上课设备<br/>
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel<int?> Create(ClassRoomCreateDto dto)
        {
            var result = ClassRoomBLL.Create(dto);

            return result.ToWebApiResultJsonModelTData();
        }
        /// <summary>
        /// 修改直播课堂
        /// </summary>
        /// <param name="dto">参数</param>
        /// <returns></returns>
        /// <remarks>
        /// 说明：以下情况无法修改<br/>
        /// 1.课堂ID不能为空。<br/>
        /// 2.同一个用户添加的课堂上课时间如果和已有课堂，上课时间有交叉。<br/>
        /// 3.通过目录ID找不到目录。<br/>
        /// 4.通过课件ID找不到对应的课件。<br/>
        /// 修改记录<br/>
        /// 2020-07-11：修改时以编辑的课件为准，删除之前的课件，课件至少需要一个。<br/>
        /// 2020-08-10：新增属性“Device”上课设备<br/>
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel Update(ClassRoomUpdateDto dto)
        {
            var result = ClassRoomBLL.Update(dto);

            return result.ToWebApiResultJsonModel();
        }
        /// <summary>
        /// 获取直播课堂列表
        /// </summary>
        /// <param name="dto">参数</param>
        /// <returns></returns>
        /// <remarks>
        /// 说明：<br/>
        /// 1.返回的上课时间保留到分钟
        /// 
        /// 修改记录：<br/>
        /// 2020-07-08：修改CreateUserId类型由于数字变为字符串<br/>
        /// 2020-07-10：新增两个返回值 FolderPath(目录路径)、UserAttendNum(上课人数)<br/>
        /// 2020-07-11：新增一个返回值 PersonNumber(上限人数)<br/>
        /// 2020-07-11：修改开始结束时间查询不准确的问题。<br/>
        /// 2020-07-20：修改IfFinish、IsDown、IfDefault值为为原始bool值，不做转化处理。<br/>
        /// 2020-08-10：新增属性“Device”上课设备<br/>
        /// 2020-08-21：新增数据“CreateNamePhotoUrl”创建人头像地址<br/>
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel<TableModel<List<ClassRoomQueryResultDto>>> List(ClassRoomQueryDto dto)
        {
            var result = ClassRoomBLL.List(dto);

            return result.ToWebApiResultJsonModelTData();
        }
        /// <summary>
        /// 删除直播课堂
        /// </summary>
        /// <param name="dto">参数</param>
        /// <returns></returns>
        /// <remarks>
        /// 说明：以下情况无法删除<br/>
        /// 1.课堂ID为空。<br/>
        /// 2.通过课堂ID未找到课堂。        
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel Delete(ClassRoomDeleteDto dto)
        {            
            var result = ClassRoomBLL.Delete(dto);

            return result.ToWebApiResultJsonModel();
        }
        /// <summary>
        /// 保存上课用户信息
        /// </summary>
        /// <param name="dto">参数</param>
        /// <returns></returns>
        /// <remarks>
        /// 说明：以下情况无法保存<br/>
        /// 1.通过课堂ID未找到直播课堂。<br/>
        /// 2.通过用户ID未找到用户信息。<br/>
        /// 
        /// 修改记录<br/>
        /// 2020-10-29：修改保存策略，用户已经添加了课堂再次保存提示：用户已经添加了课堂不用再次添加
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel SaveUserInfo(ClassRoomSaveUserInfoDto dto)
        {
            var result = ClassRoomBLL.SaveUserInfo(dto);

            return result.ToWebApiResultJsonModel();
        }

        /// <summary>
        /// 保存直播课堂录播视频
        /// </summary>
        /// <param name="dto">参数</param>
        /// <returns></returns>
        /// <remarks>
        /// 说明：以下情况无法保存<br/>
        /// 1.通过课堂ID未找到直播课堂。
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel SaveVideo(ClassRoomSaveVideoDto dto)
        {
            var result = ClassRoomBLL.SaveVideo(dto);

            return result.ToWebApiResultJsonModel();
        }

        /// <summary>
        /// 获取上课人数
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>     
        /// <remarks>
        /// 说明：返回值中“value”属性就是上课人数
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel<int> GetClassRoomPersonNumber(GetClassRoomPersonNumberQueryDto dto)
        {
            var result = ClassRoomBLL.GetClassRoomPersonNumber(dto);

            return result.ToWebApiResultJsonModelTData();
        }

        /// <summary>
        /// 获取直播课堂数
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        /// <remarks>
        /// 说明：返回值中“value”属性就是直播课堂数
        /// </remarks>
        [HttpPost]
        [ModelValid]
        public WebApiResultJsonModel<int> GetClassRoomNumber(GetClassRoomNumberQueryDto dto)
        {
            var result = ClassRoomBLL.GetClassRoomNumber(dto);

            return result.ToWebApiResultJsonModelTData();
        }
    }
}
